package cn.biplam.common.client.paging;

import cn.biplam.common.bean.sqlengine.Sql;
import cn.biplam.common.client.Database;
import cn.biplam.common.client.DbResource;
import cn.biplam.common.paramters.DatabaseType;
import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.sqlresult.SqlResult;

/**
 * 分页工厂类
 * @author WangSong 2009-8-6下午08:29:41
 * @version 1.0
 */
public class PagingFactory {
	
	private String dbType;
	
	public PagingFactory(DbResource mDbResource){
		if(mDbResource!=null){
			this.dbType = mDbResource.getDbtype();
		}
	}
	
	/**
	 * 取建表sql
	 * @param mTable 表DDL对象
	 * @return 建表sql
	 * @throws ErrorMessage 
	 */
	public SqlResult getPaging(Database database,String sql,int start,int end) throws ErrorMessage{
		
		if(DatabaseType.DataBase_Type.Oracle.toString().equals(dbType)){
			return new PagingOracle().getPaging(database, sql,start,end);
		}else if(DatabaseType.DataBase_Type.Derby.toString().equals(dbType)){
			return new PagingDerby().getPaging(database, sql,start,end);
		}else if(DatabaseType.DataBase_Type.MySql.toString().equals(dbType)){
			return new PagingMySql().getPaging(database, sql,start,end);
		}else if(DatabaseType.DataBase_Type.Db2.toString().equals(dbType)){
			return new PagingDb2().getPaging(database, sql,start,end);
		}else if(DatabaseType.DataBase_Type.Informax.toString().equals(dbType)){
			return new PagingInformax().getPaging(database, sql,start,end);
		}else if(DatabaseType.DataBase_Type.SqlServer.toString().equals(dbType)){
			return new PagingSqlServer().getPaging(database, sql,start,end);
		}else if(DatabaseType.DataBase_Type.Sybase.toString().equals(dbType)){
			return new PagingSybase().getPaging(database, sql,start,end);
		}else{
			throw new ErrorMessage("Database type is not found:"+dbType+"!");
		}
		
	}
	
	/**
	 * 执行sql语句
	 * @param database 数据库实例
	 * @param sql  查询语句
	 * @return SqlResult结果集
	 * @throws ErrorMessage
	 */
	public SqlResult execute(Database database,String sql) throws ErrorMessage{
		SqlResult sr = database.executeSelect(new Sql(sql));		
		return sr;
	}
}
